package com.tarena.lbs.coupon.dao.repository.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.tarena.lbs.coupon.dao.mapper.CouponMapper;
import com.tarena.lbs.coupon.dao.repository.CouponRepository;
import com.tarena.lbs.coupon.pojo.po.CouponPO;
import com.tarena.lbs.coupon.pojo.query.CouponQuery;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import java.util.Date;
import java.util.List;

@Repository
public class CouponRepositoryImpl implements CouponRepository {
    
    @Autowired
    private CouponMapper couponMapper;

    @Override
    public Integer save(CouponPO couponPO) {
        // 执行插入操作
        int result = couponMapper.insert(couponPO);
        
        // 检查插入是否成功
        if (result <= 0) {
            throw new RuntimeException("保存优惠券失败");
        }
        
        // 检查ID是否成功回填
        if (couponPO.getId() == null) {
            throw new RuntimeException("优惠券ID生成失败");
        }
        
        return couponPO.getId();
    }

    @Override
    public CouponPO getById(Integer id) {
        return couponMapper.selectById(id);
    }

    @Override
    public PageInfo<CouponPO> pageList(CouponQuery query) {
        // 使用PageHelper进行分页，注意参数需为int类型
        PageHelper.startPage((int) query.getPageNum(), query.getPageSize());
    
        QueryWrapper<CouponPO> wrapper = new QueryWrapper<>();

        wrapper.eq("coupon_status", 1);

        // 1. 优惠券名称 - 模糊查询，优化处理逻辑以兼容任意类型输入
        if (query.getCouponName() != null) {
            // 确保即使是空字符串也能被正确处理
            String name = query.getCouponName().trim();
            if (!name.isEmpty()) {
                wrapper.like("coupon_name", name);
            }
        }
        
        // 2. 优惠券类型 - 精确匹配，只有当明确传入类型参数时才添加过滤条件
        if (query.getCouponType() != null) {
            wrapper.eq("coupon_type", query.getCouponType());
        }
        
        // 3. 优惠券状态 - 精确匹配
        if (query.getStatus() != null) {
            wrapper.eq("status", query.getStatus());
        }
        
        // 排序
        wrapper.orderByDesc("create_at");
    
        // 执行查询
        List<CouponPO> couponPOList = couponMapper.selectList(wrapper);
    
        // 获取分页信息
        return new PageInfo<>(couponPOList);
    }

    @Override
    public void updateStatus(Integer id, Integer couponStatus) {
        // 使用UpdateWrapper来直接更新特定字段
        UpdateWrapper<CouponPO> updateWrapper = new UpdateWrapper<>();
        updateWrapper.eq("id", id);
        // 修正字段名为status
        updateWrapper.set("coupon_status", couponStatus);
        updateWrapper.set("update_at", new Date());
        couponMapper.update(null, updateWrapper);
    }
    
    @Override
    public void updateEnableStatus(Integer id, Integer enableStatus) {
        UpdateWrapper<CouponPO> updateWrapper = new UpdateWrapper<>();
        updateWrapper.eq("id", id);
        updateWrapper.set("enable_status", enableStatus);
        updateWrapper.set("update_at", new Date());
        couponMapper.update(null, updateWrapper);
    }
}